package repository;

import java.awt.Color;
import java.awt.Polygon;
import java.util.List;

import model.Ponto;
import model.Quadra;
import dao.Dao;
import engine.Engine;

public class RepQuadra {
	
	public void insertQuadra(Quadra quadra) {
		int length = quadra.getPolygon().npoints;
		for (int i = 0; i < length; i++) {
			quadra.getPontos().get(i).setPontoX(quadra.getPolygon().xpoints[i]);
			quadra.getPontos().get(i).setPontoY(quadra.getPolygon().ypoints[i]);
			Dao.getInstance().salvarOuAtualizarObjeto(quadra.getPontos().get(i));
		}
		Dao.getInstance().salvarOuAtualizarObjeto(quadra);
	}
	
	public List<Quadra> listQuadras(int mapX, int mapY) {
		List<Quadra> quadras = (List<Quadra>) Dao.getInstance().listarQuadras();
		for(Quadra q: quadras) {

			Polygon poly = new Polygon();

			for (Ponto ponto: q.getPontos()) {
				poly.addPoint((ponto.getPontoX() - q.getReferenceX() - mapX), (ponto.getPontoY() - q.getReferenceY() - mapY));
			}
			
			q.setPolygon(poly);
			q.setCor(Engine.getInstance().calculatorColor(q.getQntDoentes()));
		}
		return quadras; 
	}
	
	public void alterX(Quadra quadra, int x) {
		int length = quadra.getPolygon().npoints;
		for (int i = 0; i < length; i++) {
			quadra.getPolygon().xpoints[i] -= x;
		}
		// salva no banco
		//insertQuadra(quadra);
	}

	public void alterY(Quadra quadra, int y) {
		int length = quadra.getPolygon().npoints;
		for (int i = 0; i < length; i++) {
			quadra.getPolygon().ypoints[i] -= y;
		}
		// salva no banco
		//insertQuadra(quadra);
	}
	
	public void updatePoints(Quadra quadra, Polygon polygon) {
		quadra.getPontos().clear();
		for (int i = 0; i < polygon.npoints; i++) {
			quadra.getPontos().add(new Ponto(polygon.xpoints[i], polygon.ypoints[i]));
		}
	}
	
	public int[] getPointToPaintNumber(Quadra quadra) {
		int x1 = 10000000, x2 = -10000000, y1 = 10000000, y2 = -10000000;
		List<Ponto> pontos = quadra.getPontos();
		for (Ponto p : pontos) {
			
			int pX = p.getPontoX();
			int pY = p.getPontoY();
			
			if (pX < x1) {
				x1 = pX;
			}
			if (pX > x2) {
				x2 = pX;
			}
			if (pY < y1) {
				y1 = pY;
			}
			if (pY > y2) {
				y2 = pY;
			}
		}

		int[] pointToPaintNumber = new int[] {x1 + (x2 - x1) / 2, y1 + (y2 - y1) / 2};
		quadra.setPointToPaintNumber(pointToPaintNumber);
		return pointToPaintNumber;
	}

	
}
